package com.xiaoyilin.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Topic转发模式
 * 通配符模式(Topic)
 * 类似路由模式，但是routing_key支持模糊匹配，按规则转发消息（最灵活）。
 * 符号“#”匹配一个或多个词，符号“*”匹配不多不少一个词。
 * <p>
 * Name:交换器名称
 * Durablity:   持久化选项，Durable（持久化保存），Transient（即时保存）, 持久化保存会在RabbitMQ宕机或者重启后，未消费的消息仍然存在，即时保存在RabbitMQ宕机或者重启后交换机会不存在。需要重新定义该Exchange。
 * Auto-delete: 为true时，当没有queue绑定在此exchange时，会自动删掉此exchange.
 * Arguments:为插件和broker-specific feature使用。
 * Internal (内部的): 如果设置为YES，表示这个exchange不可以被client用来推送消息，仅用来进行exchange和exchange之间的绑定。 设置为NO则不是内部使用的，可以用于client客户端直接发布消息
 * Type: 交换器类型
 */
@Configuration
public class RabbitTopicConfig {

    @Bean(name = "queue")
    public Queue queue() {
        return new Queue("my.topic.queue");
    }

    @Bean(name = "queues")
    public Queue queues() {
        return new Queue("my.topic.queues");
    }

    @Bean
    public TopicExchange myTopicExchange() {
        return new TopicExchange("my.topic.exchange");
    }

    @Bean
    public Binding bindingExchangeMessage(@Qualifier("queue") Queue oneTopicQueue, TopicExchange myTopicExchange) {
        return BindingBuilder.bind(oneTopicQueue).to(myTopicExchange).with("my.topic.queue");
    }

   /* @Bean
    public Binding bindingExchangeMessages(@Qualifier("queues") Queue twoTopicQueue, TopicExchange myTopicExchange) {
        //*表示一个词,#表示零个或多个词
        return BindingBuilder.bind(twoTopicQueue).to(myTopicExchange).with("my.topic.#");
    }*/


}
